package main

import (
	"database/sql"
	"errors"
	"fmt"
)

// 我们在数据库操作的时候，比如 dao 层中当遇到一个 sql.ErrNoRows 的时候，是否应该 Wrap 这个 error，抛给上层。为什么，应该怎么做请写出代码？
// 答：不应该Wrap这个error,抛给上层。 原因数据库操作有高度的可重用性， 具有最高可重用性的包只能返回根错误值，它的原始错误是什么就是什么。

// dao层遇到错误直接返回给上层
func DaoQuery(query string) error {
	err := todoSelect()

	if err == sql.ErrNoRows {
		return fmt.Errorf("%d, not found", notFoundCode)
	} else if err != nil {
		return fmt.Errorf("%d, not found", systemErr)
	}

	return nil
}

var NotFound = errors.New("not found")

//业务层处理错误，或Wrap.errors上抛
func BizQuery() error {
	err := DaoQuery("select ……")

	if err == NotFound {
		return nil
	}

	if err != nil {
		fmt.Println(err)
		return nil
	}
	return nil
}
